package service

import (
	"context"
	"github.com/micro/go-micro/v2/errors"
	pb "micro-grpc-server/services/wechat/proto"
)

// 这个文件的接口只有 `微信公众号` 能使用

// 标签列表
func (s *WechatService) TagsList(ctx context.Context, rq *pb.ScenarioRequest, resp *pb.ListTagResponse) error {
	list, err := s.dao.Tags(rq.Scenario)
	if err != nil {
		return err
	}
	if len(list) > 0 {
		resp.List = list
	}

	return nil
}

// 创建标签
func (s *WechatService) CreateTag(ctx context.Context, rq *pb.TagBodyRequest, resp *pb.EmptyResponse) error {
	var mp = s.dao.GetMp(rq.Scenario)
	if mp == nil {
		return errors.BadRequest(s.conf.ServerName, "%s 配置不存在", rq.Scenario)
	}
	if _, err := mp.GetUser().CreateTag(rq.Name); err != nil {
		return errors.BadRequest(s.conf.ServerName, err.Error())
	}
	return nil
}

// 修改标签
func (s *WechatService) UpdateTag(ctx context.Context, rq *pb.TagBodyRequest, resp *pb.EmptyResponse) error {
	var mp = s.dao.GetMp(rq.Scenario)
	if mp == nil {
		return errors.BadRequest(s.conf.ServerName, "%s 配置不存在", rq.Scenario)
	}
	err := mp.GetUser().UpdateTag(rq.Id, rq.Name)
	if err != nil {
		return errors.BadRequest(s.conf.ServerName, err.Error())
	}
	return nil
}

// 删除标签
func (s *WechatService) DeleteTag(ctx context.Context, rq *pb.TagBodyRequest, resp *pb.EmptyResponse) error {
	var mp = s.dao.GetMp(rq.Scenario)
	if mp == nil {
		return errors.BadRequest(s.conf.ServerName, "%s 配置不存在", rq.Scenario)
	}
	err := mp.GetUser().DeleteTag(rq.Id)
	if err != nil {
		return errors.BadRequest(s.conf.ServerName, err.Error())
	}
	return nil
}

// 批量打标签
func (s *WechatService) BatchTag(ctx context.Context, rq *pb.BatchTagRequest, resp *pb.EmptyResponse) error {
	return s.dao.BatchTag(rq.Scenario, rq.UserList, rq.TagId)
}

// 批量打标签
func (s *WechatService) BatchUnTag(ctx context.Context, rq *pb.BatchTagRequest, resp *pb.EmptyResponse) error {
	return s.dao.BatchUnTag(rq.Scenario, rq.UserList, rq.TagId)
}

// 根据条件批量打标签
func (s *WechatService) BatchTagWithQuery(ctx context.Context, rq *pb.BatchTagBodyRequest, resp *pb.EmptyResponse) error {
	// 这个地方可能一次性取百万 所以放队列里比较好 或者加一个超时chan 提前返回
	return nil
}
